#include "mymainwindow.h"

#include <QMenuBar>
#include <QMenu>
#include <QToolBar>
#include <QStatusBar>
#include <QLabel>
#include <QLineEdit>
#include <QTextEdit>
#include <QDockWidget>

#include <QDebug>

MyMainWindow::MyMainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setWindowTitle("主窗口测试");
    this->resize(600, 400);

    // 1. 菜单栏
    // 1)实例化菜单栏对象，并将菜单栏添加到窗口上
    QMenuBar* menuBar = new QMenuBar;
    this->setMenuBar(menuBar);

    // 2)向菜单栏中设置菜单项
    // ① 添加一级菜单
    QMenu *fileMenu = menuBar->addMenu("文件");

    // 如果给一级菜单上加图标，则只显示图标，不显示文字
    QMenu *editMenu = menuBar->addMenu(QIcon(":/icons/4.jpg"), "编辑");

    // ② 添加二级菜单
    // 添加能够直接点击，产生对应动作的菜单
    QAction* newAction = fileMenu->addAction(QIcon(":/icons/3.jpg"), "新建文件或项目(N)...");

    fileMenu->addAction(QIcon(":/icons/1.gif"),"打开文件或项目(O)...");
    fileMenu->addSeparator();  // 分割线
    QAction* exitAction = fileMenu->addAction("退出(X)...");

    editMenu->addAction("Undo");
    editMenu->addAction("Redo");
    editMenu->addSeparator();  // 分割线
    editMenu->addAction("复制");
    editMenu->addAction("剪切");
    editMenu->addAction("粘贴");

    // ③ 添加三级菜单
    QMenu* debugMenu = menuBar->addMenu("调试"); // 添加一级菜单
    debugMenu->addAction("系统调试");  // 添加二级菜单（可以直接点的）
    QMenu* startMenu = debugMenu->addMenu(QIcon(":/icons/6.jpg"), "开始调试");  // 添加二级菜单（可以包含子菜单的菜单项）
    QAction* startDebug = startMenu->addAction("Start debugging");
    startMenu->addAction("Stop debugging");
    startMenu->addSeparator();
    startMenu->addAction("关联");

    // 工具 -- 练习
    QMenu* toolMenu = menuBar->addMenu("工具");
    toolMenu->addAction("Locate...");
    QMenu* outMenu = toolMenu->addMenu("外部(E)");
    QMenu* qtQuickMenu = outMenu->addMenu("Qt Quick");
    qtQuickMenu->addAction("Qt Quick 1 Preview(qmlviewer)");
    qtQuickMenu->addAction("Qt Quick 2 Preview(qmlviewer)");

    QMenu* qtLangMenu = outMenu->addMenu("Qt语言家");
    qtLangMenu->addAction("更新翻译(lupdate)");
    qtLangMenu->addAction("发布翻译(lrelaease)");

    // 给action连接信号和槽
    connect(newAction, &QAction::triggered, [](){
        qDebug() << "创建项目或者文件";
    });

    connect(startDebug, &QAction::triggered, [](){
        qDebug() << "开始调试了...";
    });

    connect(exitAction, &QAction::triggered, this, &QMainWindow::close);


    // 2. 工具栏
    // 1).创建QToolBar对象，并添加到窗口中
    QToolBar* toolBar = new QToolBar;
    this->addToolBar(toolBar);

    // 设置工具栏属性
    toolBar->setAllowedAreas(Qt::TopToolBarArea | Qt::RightToolBarArea);  // 允许放置的位置
    toolBar->setFloatable(false);  // 是否可悬浮
    toolBar->setMovable(false);  // 是否可移动

    // 2).向工具栏中添加Action
    toolBar->addAction("新建");
    toolBar->addAction(QIcon(":/icons/4.jpg"), "打开");
    toolBar->addSeparator();
    toolBar->addAction(exitAction);  // 常用


    // 3. 状态栏
    // 1).创建状态栏对象并添加到窗口中
    QStatusBar* statusBar = new QStatusBar;
    this->setStatusBar(statusBar);

    // 2).创建部件，添加到状态栏中
    QLabel* left = new QLabel("左侧的数据");
    statusBar->addWidget(left);

    QLabel* right = new QLabel("右侧的数据");
    statusBar->addPermanentWidget(right);

    QLineEdit* edit = new QLineEdit;
    statusBar->addPermanentWidget(edit);


    // 4. 中心部件
    QTextEdit* textEdit = new QTextEdit;
    this->setCentralWidget(textEdit);

    // 5. 停靠部件
    QDockWidget* dockWidget = new QDockWidget("标题", this);
    this->addDockWidget(Qt::TopDockWidgetArea, dockWidget);



}

MyMainWindow::~MyMainWindow()
{

}
